﻿using System;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using MySql.Data.MySqlClient;



namespace MYSQL_db
{
    class SqlHelper
    {
        //从配置文件中获取数据库连接字符串
        private static string ConnStr = "charset=utf8;user id=fengma;host=localhost;database=member;password=guduahut2013";
        //private static string ConnStr = "charset=utf8;user id=root;host=localhost;database=member;password=";


        //------------------------------------------------------------------------------------------------------------------优化
        //第三版：使用长度可变参数,参数化查询避免SQL注入漏洞攻击
        //-----------------------用来执行insert delete 
        public static int ExecuteNonQuery(string sql, params MySqlParameter[] parameters)
     
        {
            using (MySqlConnection conn = new MySqlConnection(ConnStr))
            {
                conn.Open();
                using (MySqlCommand cmd = new MySqlCommand())
                {
                    cmd.Connection = conn;
                    cmd.CommandText = sql;
             
                    //foreach (SqlParameter param in parameters)
                    //{
                    //    cmd.Parameters.Add(param);
                    //}
                    for (int j = 0; j < parameters.Length; j++)
                    {
                        cmd.Parameters.Add(parameters[j]);
                    }

                 
                    return cmd.ExecuteNonQuery();
                }
            }
        }
        //------------------------------------执行返回结果一个值
        public static object ExecuteScalar(string sql, params  MySqlParameter[] parameters)
        {
              using (MySqlConnection conn = new MySqlConnection(ConnStr))
            {
                conn.Open();
                using (MySqlCommand cmd = new MySqlCommand())               
                {
                    cmd.Connection = conn;
                    cmd.CommandText = sql;

                    for (int j = 0; j < parameters.Length; j++)
                    {
                        cmd.Parameters.Add(parameters[j]);
                    }

                    return cmd.ExecuteScalar();
                }
            }
        }

        //只用来执行查询结果比较少的sql
        public static DataTable ExecuteDataTable(string sql, params MySqlParameter[] parameters)
        {
            using (MySqlConnection conn = new MySqlConnection(ConnStr))
            {
               
                using (MySqlCommand cmd = new MySqlCommand(sql))
                {
                    cmd.Connection = conn;
                    //cmd.CommandText = sql;
                    conn.Open();
                    for (int j = 0; j < parameters.Length; j++)
                    {
                        cmd.Parameters.Add(parameters[j]);
                    }
                    DataSet dataset = new DataSet();
                    MySqlDataAdapter adapter = new MySqlDataAdapter(cmd);
                    adapter.Fill(dataset);
                    conn.Close();
                    return dataset.Tables[0];

                }
            }

        }

        //数据库空值转换成c#空值
        public static object FromDbValue(object value)
        {
            if (value == DBNull.Value)
            {
                return null;
            }
            else
            {
                return value;
            }
        }
        //c#空值转换成数据库空值
        public static object ToDbValue(object value)
        {
            if (value == null)
            {
                return DBNull.Value;
            }
            else
            {
                return value;
            }
        }

        ////执行返回多行结果

        //public static MySqlDataReader ExecuteReader(string sql, params MySqlParameter[] parameters)
        //{
        //    using (MySqlConnection conn = new MySqlConnection(ConnStr))
        //    {
        //        conn.Open();
        //        using (MySqlCommand cmd = new MySqlCommand())
        //        {
        //            cmd.Connection = conn;
        //            cmd.CommandText = sql;

        //            for (int j = 0; j < parameters.Length; j++)
        //            {
        //                cmd.Parameters.Add(parameters[j]);
        //            }

        //            using (MySqlDataReader reader = cmd.ExecuteReader())
        //            {
        //                return reader;
        //            }
        //            /*
        //             用法：
        //             MySqlDataReader reader = cmd.ExecuteReader())//执行查询返回多条查询结果
                 
        //                while (reader.Read())//未读到最后一条返回true,最后返回false
        //                {
        //                    string Name = reader.GetString(1);//参数1是数据库中表的第几列（0开始），这里是获取Name字段
        //                    //reader的GetInt32,GetString等方法只接受整数参数，就是列的序号
        //                    //GetInt32()获得的是int类型，GetInt64()获取的是long类型（数据库中是bigint）
        //                    //GetOrdinal方法根据列名动态得到列的序号
        //                }
        //             * reader.close();
        //             */

        //        }
        //    }

        //}
    }
}

